blob: a4be13e8fa6e19de1a4a70510b875c269c767289 [file] [log] [blame]
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +00001 _ _ ____ _
2 ___| | | | _ \| |
3 / __| | | | |_) | |
4 | (__| |_| | _ <| |___
5 \___|\___/|_| \_\_____|
6
7TODO
8
Daniel Stenbergf54a2822001-03-08 12:32:03 +00009 Things to do in project cURL. Please tell me what you think, contribute and
Daniel Stenberg2d503912001-06-19 09:12:27 +000010 send me patches that improve things! Also check the http://curl.haxx.se/dev
11 web section for various development notes.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +000012
Daniel Stenberge60e7412001-11-02 12:51:18 +000013 LIBCURL
Daniel Stenberg6704d442001-08-22 11:22:43 +000014
Daniel Stenberg2c39a432001-07-02 08:21:25 +000015 * Consider an interface to libcurl that allows applications to easier get to
16 know what cookies that are sent back in the response headers.
17
Daniel Stenberge60e7412001-11-02 12:51:18 +000018 * Make content encoding/decoding internally be made using a filter system.
19
Daniel Stenberg88631272002-03-18 07:40:00 +000020 * Test the 'multi' interface more.
Daniel Stenberg2d503912001-06-19 09:12:27 +000021
22 * Introduce another callback interface for upload/download that makes one
23 less copy of data and thus a faster operation.
Daniel Stenberge60e7412001-11-02 12:51:18 +000024 [http://curl.haxx.se/dev/no_copy_callbacks.txt]
25
26 * Add configure options that disables certain protocols in libcurl to
27 decrease footprint. '--disable-[protocol]' where protocol is http, ftp,
28 telnet, ldap, dict or file.
29
30 * Add asynchronous name resolving. http://curl.haxx.se/dev/async-resolver.txt
Daniel Stenberg01cfe672002-01-18 12:48:36 +000031 This should be made to work on most of the supported platforms, or
32 otherwise it isn't really interesting.
Daniel Stenberge60e7412001-11-02 12:51:18 +000033
Daniel Stenberg01cfe672002-01-18 12:48:36 +000034 * Data sharing. Tell which easy handles within a multi handle that should
Daniel Stenbergc3bfb352002-04-12 07:19:43 +000035 share cookies, connection cache, dns cache, ssl session cache. Full
36 suggestion found here: http://curl.haxx.se/dev/sharing.txt
Daniel Stenberg01cfe672002-01-18 12:48:36 +000037
38 * Mutexes. By adding mutex callback support, the 'data sharing' mentioned
39 above can be made between several easy handles running in different threads
40 too. The actual mutex implementations will be left for the application to
41 implement, libcurl will merely call 'getmutex' and 'leavemutex' callbacks.
Daniel Stenbergc3bfb352002-04-12 07:19:43 +000042 Part of the sharing suggestion at: http://curl.haxx.se/dev/sharing.txt
Daniel Stenberg01cfe672002-01-18 12:48:36 +000043
44 * No-faster-then-this transfers. Many people have limited bandwidth and they
45 want the ability to make sure their transfers never use more bandwith than
46 they think is good.
47
48 * Set the SO_KEEPALIVE socket option to make libcurl notice and disconnect
49 very long time idle connections.
Daniel Stenberg558d12d2001-12-17 10:32:10 +000050
Daniel Stenberg39d45522002-01-21 12:11:45 +000051 * Make sure we don't ever loop because of non-blocking sockets return
Daniel Stenberg5c4b4222002-02-18 10:51:28 +000052 EWOULDBLOCK or similar. This concerns the HTTP request sending (and
53 especially regular HTTP POST), the FTP command sending etc.
Daniel Stenberg39d45522002-01-21 12:11:45 +000054
Daniel Stenbergc9c00d22002-01-22 13:10:16 +000055 * Go through the code and verify that libcurl deals with big files >2GB and
56 >4GB all over. Bug reports indicate that it doesn't currently work
57 properly.
58
Daniel Stenberg88631272002-03-18 07:40:00 +000059 * Make the built-in progress meter use its own dedicated output stream, and
60 make it possible to set it. Use stderr by default.
61
Daniel Stenberge60e7412001-11-02 12:51:18 +000062 DOCUMENTATION
63
Daniel Stenbergc3bfb352002-04-12 07:19:43 +000064 * Include documentation in the main archive about all the various libcurl
65 bindings.
Daniel Stenberge60e7412001-11-02 12:51:18 +000066
67 FTP
68
69 * FTP ASCII upload does not follow RFC959 section 3.1.1.1: "The sender
70 converts the data from an internal character representation to the standard
71 8-bit NVT-ASCII representation (see the Telnet specification). The
72 receiver will convert the data from the standard form to his own internal
73 form."
Daniel Stenberg0058e872001-05-18 12:55:13 +000074
Daniel Stenberg6704d442001-08-22 11:22:43 +000075 * An option to only download remote FTP files if they're newer than the local
76 one is a good idea, and it would fit right into the same syntax as the
77 already working http dito works. It of course requires that 'MDTM' works,
78 and it isn't a standard FTP command.
79
Daniel Stenberg01cfe672002-01-18 12:48:36 +000080 * Add FTPS support with SSL for the data connection too.
Daniel Stenbergff681f72001-03-13 15:44:31 +000081
Daniel Stenberge60e7412001-11-02 12:51:18 +000082 HTTP
Daniel Stenberg2c39a432001-07-02 08:21:25 +000083
Daniel Stenberge60e7412001-11-02 12:51:18 +000084 * HTTP PUT for files passed on stdin *OR* when the --crlf option is
85 used. Requires libcurl to send the file with chunked content
86 encoding. [http://curl.haxx.se/dev/HTTP-PUT-stdin.txt] When the filter
87 system mentioned above gets real, it'll be a piece of cake to add.
Daniel Stenberge559a7b2000-08-21 21:56:41 +000088
Daniel Stenberg0ec370e2002-02-18 23:17:57 +000089 * Pass a list of host name to libcurl to which we allow the user name and
90 password to get sent to. Currently, it only get sent to the host name that
91 the first URL uses (to prevent others from being able to read it), but this
92 also prevents the authentication info from getting sent when following
93 locations to legitimate other host names.
94
Daniel Stenbergf54a2822001-03-08 12:32:03 +000095 * "Content-Encoding: compress/gzip/zlib" HTTP 1.1 clearly defines how to get
96 and decode compressed documents. There is the zlib that is pretty good at
97 decompressing stuff. This work was started in October 1999 but halted again
98 since it proved more work than we thought. It is still a good idea to
Daniel Stenberge60e7412001-11-02 12:51:18 +000099 implement though. This requires the filter system mentioned above.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000100
Daniel Stenbergf54a2822001-03-08 12:32:03 +0000101 * Authentication: NTLM. Support for that MS crap called NTLM
Daniel Stenberg48187172000-09-21 08:53:59 +0000102 authentication. MS proxies and servers sometime require that. Since that
103 protocol is a proprietary one, it involves reverse engineering and network
104 sniffing. This should however be a library-based functionality. There are a
105 few different efforts "out there" to make open source HTTP clients support
106 this and it should be possible to take advantage of other people's hard
Daniel Stenbergc1110332001-02-16 13:41:34 +0000107 work. http://modntlm.sourceforge.net/ is one. There's a web page at
108 http://www.innovation.ch/java/ntlm.html that contains detailed reverse-
109 engineered info.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000110
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000111 * RFC2617 compliance, "Digest Access Authentication" A valid test page seem
112 to exist at: http://hopf.math.nwu.edu/testpage/digest/ And some friendly
113 person's server source code is available at
114 http://hopf.math.nwu.edu/digestauth/index.html Then there's the Apache
115 mod_digest source code too of course. It seems as if Netscape doesn't
116 support this, and not many servers do. Although this is a lot better
117 authentication method than the more common "Basic". Basic sends the
118 password in cleartext over the network, this "Digest" method uses a
119 challange-response protocol which increases security quite a lot.
120
121 * Pipelining. Sending multiple requests before the previous one(s) are done.
122 This could possibly be implemented using the multi interface to queue
123 requests and the response data.
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000124
Daniel Stenberge60e7412001-11-02 12:51:18 +0000125 TELNET
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000126
Daniel Stenberge60e7412001-11-02 12:51:18 +0000127 * Make TELNET work on windows98!
Daniel Stenberg7c37c6a2000-05-22 17:35:35 +0000128
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000129 * Reading input (to send to the remote server) on stdin is a crappy solution
130 for library purposes. We need to invent a good way for the application to
131 be able to provide the data to send.
132
133 * Move the telnet support's network select() loop go away and merge the code
134 into the main transfer loop. Until this is done, the multi interface won't
135 work for telnet.
136
Daniel Stenberge60e7412001-11-02 12:51:18 +0000137 SSL
138
Daniel Stenberg5cffe052002-02-07 10:43:43 +0000139 * If you really want to improve the SSL situation, you should probably have a
140 look at SSL cafile loading as well - quick traces look to me like these are
141 done on every request as well, when they should only be necessary once per
142 ssl context (or once per handle). Even better would be to support the SSL
143 CAdir option - instead of loading all of the root CA certs for every
144 request, this option allows you to only read the CA chain that is actually
145 required (into the cache)...
146
Daniel Stenberg60f19262001-11-13 09:56:29 +0000147 * Add an interface to libcurl that enables "session IDs" to get
148 exported/imported. Cris Bailiff said: "OpenSSL has functions which can
149 serialise the current SSL state to a buffer of your choice, and
150 recover/reset the state from such a buffer at a later date - this is used
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000151 by mod_ssl for apache to implement and SSL session ID cache". This whole
152 idea might become moot if we enable the 'data sharing' as mentioned in the
153 LIBCURL label above.
Daniel Stenberg60f19262001-11-13 09:56:29 +0000154
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000155 * OpenSSL supports a callback for customised verification of the peer
156 certificate, but this doesn't seem to be exposed in the libcurl APIs. Could
157 it be? There's so much that could be done if it were! (brought by Chris
158 Clark)
159
Daniel Stenberge60e7412001-11-02 12:51:18 +0000160 * Make curl's SSL layer option capable of using other free SSL libraries.
161 Such as the Mozilla Security Services
162 (http://www.mozilla.org/projects/security/pki/nss/) and GNUTLS
163 (http://gnutls.hellug.gr/)
164
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000165 LDAP
166
167 * Look over the implementation. The looping will have to "go away" from the
168 lib/ldap.c source file and get moved to the main network code so that the
169 multi interface and friends will work for LDAP as well.
170
Daniel Stenberg3e049a92001-11-13 09:06:32 +0000171 CLIENT
Daniel Stenberge60e7412001-11-02 12:51:18 +0000172
Daniel Stenberg3e049a92001-11-13 09:06:32 +0000173 * "curl ftp://site.com/*.txt"
Daniel Stenberge60e7412001-11-02 12:51:18 +0000174
Daniel Stenberg2519a8c2001-11-14 09:32:30 +0000175 * Several URLs can be specified to get downloaded. We should be able to use
176 the same syntax to specify several files to get uploaded (using the same
177 persistant connection), using -T.
178
Daniel Stenberg01cfe672002-01-18 12:48:36 +0000179 * When the multi interface has been implemented and proved to work, the
180 client could be told to use maximum N simultaneous transfers and then just
181 make sure that happens. It should of course not make more than one
182 connection to the same remote host.
Daniel Stenbergd12fd892001-12-06 14:40:16 +0000183
Daniel Stenberg5c4b4222002-02-18 10:51:28 +0000184 * Extending the capabilities of the multipart formposting. How about leaving
185 the ';type=foo' syntax as it is and adding an extra tag (headers) which
186 works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where
187 fil1.hdr contains extra headers like
188
189 Content-Type: text/plain; charset=KOI8-R"
190 Content-Transfer-Encoding: base64
191 X-User-Comment: Please don't use browser specific HTML code
192
193 which should overwrite the program reasonable defaults (plain/text,
194 8bit...) (Idea brough to us by kromJx)
195
Daniel Stenberge60e7412001-11-02 12:51:18 +0000196 TEST SUITE
197
198 * Extend the test suite to include more protocols. The telnet could just do
199 ftp or http operations (for which we have test servers).
200
201 * Make the test suite work on more platforms. OpenBSD and Mac OS. Remove
202 fork()s and it should become even more portable.
203
204 * Introduce a test suite that tests libcurl better and more explicitly.